#include "stm32f10x.h"                  // Device header
#include "Delay.h"

typedef enum {//红绿灯状态事件
	red,
	yellow,
	green
}LED_ON;
uint16_t Num = 0;//记录时间的值
LED_ON state = red;//初始红灯亮起
void LED_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_8;//分别对应：红、黄、绿、蜂鸣器
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_SetBits(GPIOA,GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_8);//初始化一下
	//GPIO_ResetBits(GPIOA,GPIO_Pin_3 | GPIO_Pin_4);
}


void LED_Light(void)//事件函数
{
	GPIO_SetBits(GPIOA,GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4);
	switch(state)
	{
		case red:
		{
			GPIO_ResetBits(GPIOA,GPIO_Pin_2);
			break;
		}
		case green:
		{
			GPIO_ResetBits(GPIOA,GPIO_Pin_4);
			break;
		}
		case yellow:
		{
			for(uint16_t i = 1;i <= 3;i++)//控制黄灯闪烁
			{
			GPIO_ResetBits(GPIOA,GPIO_Pin_3);
			Delay_ms(500);
			GPIO_SetBits(GPIOA,GPIO_Pin_3);
			Delay_ms(500);
			}
			break;
		}
	
}
}
void TIM2_IRQHandler(void)
{
   if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET)
   {
	   TIM_ClearFlag(TIM2,TIM_FLAG_Update);
	   Num++;
	   switch(state)
	   {
		   case red:                                  /*if是来判断时间的，如果时间到了切换状态，Num将清零重新计时 */
			   if(Num >= 3)
			   {
				   state = green;
				   Num = 0;
				   LED_Light();
			   }
			   break;
			case green:
			   if(Num >= 3)
			   {
				   state = yellow;
				   Num = 0;
				   LED_Light();
			   }
			   break;   
		 case yellow:
			   if(Num >= 3)
			   {
				   state = red;
				   Num = 0;
				   LED_Light();
			   }
			   break;
		}   
	   
	 }
 }  
   


	
	
	
	
	

	
    

